/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Beans;

import Modelo.DetalleFactura;
import Modelo.Factura;
import Utils.Constantes;
import Utils.Mensajes;
import java.io.Serializable;
import java.util.ArrayList;
import javax.faces.event.ActionEvent;

/**
 *
 * @author HNCR
 */
public class BeanDetalleFactura implements Serializable {
    
    private DetalleFactura objDetalle_Reg;
    private DetalleFactura objDetalle_Mod;
    private DetalleFactura objDetalle_Detalle;
    private DetalleFactura objDetalle_Eli;
    private DetalleFactura objDetalle_Cerrar;
    
    private DetalleFactura objDetalle_Busca;
    
    private ArrayList<DetalleFactura> arr_detalle_factura=null;
    
    //TabView comportamiento ocultar o mostrar componentes
    private Integer activeTabIndex; //indice de los tab
    private boolean bandVer=true;    
    private boolean bandMod=true;
    private boolean bandEli=true;
    private boolean bandCerr=true;
    
    private String tot;
    
    private String puntAnt;

    public String getTot() {
        return tot;
    }

    public void setTot(String tot) {
        this.tot = tot;
    }

    public boolean isBandCerr() {
        return bandCerr;
    }

    public void setBandCerr(boolean bandCerr) {
        this.bandCerr = bandCerr;
    }

    public DetalleFactura getObjDetalle_Cerrar() {
        return objDetalle_Cerrar;
    }

    public void setObjDetalle_Cerrar(DetalleFactura objDetalle_Cerrar) {
        this.objDetalle_Cerrar = objDetalle_Cerrar;
    }

    public DetalleFactura getObjDetalle_Reg() {
        return objDetalle_Reg;
    }

    public void setObjDetalle_Reg(DetalleFactura objDetalle_Reg) {
        this.objDetalle_Reg = objDetalle_Reg;
    }

    public DetalleFactura getObjDetalle_Mod() {
        return objDetalle_Mod;
    }

    public void setObjDetalle_Mod(DetalleFactura objDetalle_Mod) {
        this.objDetalle_Mod = objDetalle_Mod;
    }

    public DetalleFactura getObjDetalle_Detalle() {
        return objDetalle_Detalle;
    }

    public void setObjDetalle_Detalle(DetalleFactura objDetalle_Detalle) {
        this.objDetalle_Detalle = objDetalle_Detalle;
    }

    public DetalleFactura getObjDetalle_Eli() {
        return objDetalle_Eli;
    }

    public void setObjDetalle_Eli(DetalleFactura objDetalle_Eli) {
        this.objDetalle_Eli = objDetalle_Eli;
    }

    public DetalleFactura getObjDetalle_Busca() {
        return objDetalle_Busca;
    }

    public void setObjDetalle_Busca(DetalleFactura objDetalle_Busca) {
        this.objDetalle_Busca = objDetalle_Busca;
    }

    public ArrayList<DetalleFactura> getArr_detalle_factura() {
        return arr_detalle_factura;
    }

    public void setArr_detalle_factura(ArrayList<DetalleFactura> arr_detalle_factura) {
        this.arr_detalle_factura = arr_detalle_factura;
    }

    public Integer getActiveTabIndex() {
        return activeTabIndex;
    }

    public void setActiveTabIndex(Integer activeTabIndex) {
        this.activeTabIndex = activeTabIndex;
    }

    public boolean isBandVer() {
        return bandVer;
    }

    public void setBandVer(boolean bandVer) {
        this.bandVer = bandVer;
    }

    public boolean isBandMod() {
        return bandMod;
    }

    public void setBandMod(boolean bandMod) {
        this.bandMod = bandMod;
    }

    public boolean isBandEli() {
        return bandEli;
    }

    public void setBandEli(boolean bandEli) {
        this.bandEli = bandEli;
    }

    public String getPuntAnt() {
        return puntAnt;
    }

    public void setPuntAnt(String puntAnt) {
        this.puntAnt = puntAnt;
    }
    
    //inicializaciones
    public void doIniciarDetalleListar(){
        this.arr_detalle_factura=new ArrayList<DetalleFactura>();
    }
    public void doIniciarDetalleRegistrar(){
        this.objDetalle_Reg=new DetalleFactura();
    }
    public void doIniciarDetalleModificar(){
        this.objDetalle_Mod=new DetalleFactura();
    }
    public void doIniciarDetalleDetalle(){
        this.objDetalle_Detalle=new DetalleFactura();
    }
    public void doIniciarDetalleBuscar(){
        this.objDetalle_Busca=new DetalleFactura();
    }
    public void doIniciarDetalleEliminar(){
        this.objDetalle_Eli=new DetalleFactura();
    }
    public void doIniciarDetalleCerrar(){
        this.objDetalle_Cerrar=new DetalleFactura();
    }
    
    //constr
    public BeanDetalleFactura() {
        try {
            this.doIniciarDetalleRegistrar();
            this.doIniciarDetalleDetalle();
        } catch (Exception e) {
            Mensajes.manejarError(e,"Error al Iniciar Proceso");
        }
    }
    
    public String doPasarFactDet(Factura obj){
        try {
            //seteo el cod_factura de detalle con el cod_factura de factura
            objDetalle_Reg.getObjFactura().setCod_factura(obj.getCod_factura());
        } catch (Exception e) {
            Mensajes.manejarError("Error al pasar","No se Pudo");                
        }
        return null;
    }
    
    public String doDetalleFacturaRegistra(){
        
        try {            
            boolean a = false;            
            //opciokn 2: enviar como String            
            a = DetalleFactura.registrarDetalleFactura(objDetalle_Reg);
            
            if(a){
                Mensajes.guardarMensajeExito("Registro","Registrado correctamente");
                this.doIniciarDetalleRegistrar();// limpia los datos de la vista cuando se registra
            }
            else{
                 Mensajes.manejarError("Registro","Error al Registrar");                
            }
            
        } catch (Exception e) {
            Mensajes.manejarError(e,"Registrar Pedido");
        }
        return null;
    }
    
    public String doCancelarPedido(){
        
        try {            
            
            if(this.cancelarPedido()){
                Mensajes.guardarMensajeExito("Cancelar","Cancelado correctamente");
                this.doIniciarDetalleEliminar();
            }
            else{
                 Mensajes.manejarError("Cancelar","Error al Cancelar");                
            }
            
        } catch (Exception e) {
            Mensajes.manejarError(e,"Cancelar Pedido");
        }
        return null;
    }
    
    public String doDetalleFactModifica(){
        
        try {
            
            if(this.modificarDetalleFact()){
                Mensajes.guardarMensajeExito("Modificar","Modificado correctamente");
                this.doIniciarDetalleModificar();// limpia los datos de la vista cuando se registra
            }
            else{
                 Mensajes.manejarError("Modificar","Error al Modificar");                
            }
            
        } catch (Exception e) {
            Mensajes.manejarError(e,"Modificar");
        }
        this.desactivaTabMod();
        return null;
    }
    
    public String doFacturaEliminar(){
        
        try {
            
            if(this.eliminarFactura()){
                Mensajes.guardarMensajeExito("Eliminar","Eliminado correctamente");
                this.doIniciarDetalleEliminar();// limpia los datos de la vista cuando se registra
            }
            else{
                 Mensajes.manejarError("Eliminar","Error al Modificar");                
            }
            
        } catch (Exception e) {
            Mensajes.manejarError(e,"Eliminar");
        }
        this.desactivaTabElim();
        return null;
    }
    
    public String doFacturaCerrar(){
        
        try {
            
            if(this.cerrarFactura()){
                Mensajes.guardarMensajeExito("Cerrar","Factura cerrada Correctamente");
                this.doIniciarDetalleCerrar();// limpia los datos de la vista cuando se registra
            }
            else{
                 Mensajes.manejarError("Cerrar","Error al Cerrar");                
            }
            
        } catch (Exception e) {
            Mensajes.manejarError(e,"Cerrar");
        }
        this.desactivaTabCerr();
        return null;
    }
    
    public String cancelarPedido(DetalleFactura so){        
        this.doIniciarDetalleEliminar();
        this.objDetalle_Eli=so;
        System.out.println("->"+this.objDetalle_Eli.getCod_detalle());
        return null;          
    }
    
    public boolean  cancelarPedido(){
        boolean a=false;        
       DetalleFactura so=new DetalleFactura();
        try{            
            so=this.objDetalle_Eli;
            this.doIniciarDetalleEliminar();
            System.out.println("2->"+this.objDetalle_Eli.getCod_detalle());
            System.out.println("3->"+so.getCod_detalle());
            a=DetalleFactura.anularDetalleFactura(so);
        }catch(Exception e){
            System.out.println("Error en el metodo por: " + e.getMessage());
            e.printStackTrace();
        }
       return a;    
    }
    
    public ArrayList<DetalleFactura> doListarDetallesFactura(){
        this.doIniciarDetalleListar();
        this.arr_detalle_factura = DetalleFactura.getListarDetallesFactura(objDetalle_Detalle);
        return this.arr_detalle_factura;
    }
     public String getSizeRegistrosDetalle(){
        if(this.arr_detalle_factura==null){
            return "0";
          }
        else{
            return "" + this.arr_detalle_factura.size();            
        }        
    }
     
     public void onClickBusq(ActionEvent evt){ 
        Object param=evt.getComponent().getAttributes().get("param");
        this.puntAnt=param.toString();          
    }
     
     //modificar producto
     public String modificarDetalleFact(DetalleFactura so){        
        this.doIniciarDetalleModificar();
        this.objDetalle_Mod=so;
        this.bandMod=false;     
        this.activeTabIndex=Constantes.FACT_TAB_MOD_PEDIDO;         
        return null;          
    }
     
     //elimina
     public String eliminarFactura(Factura so){        
        this.doIniciarDetalleEliminar();
        this.objDetalle_Eli.setObjFactura(so);
        this.bandEli=false;     
        this.activeTabIndex=Constantes.FACT_TAB_ELIM_PEDIDO;        
        return null;          
    }
     
     //elimina
     public String cerrarFactura(Factura so){        
        this.doIniciarDetalleCerrar();
        this.objDetalle_Cerrar.setObjFactura(so);
        this.tot=DetalleFactura.getCalcularTotal(objDetalle_Cerrar.getObjFactura());
        this.bandCerr=false;     
        this.activeTabIndex=Constantes.FACT_TAB_CERR_PEDIDO;        
        return null;          
    }
    
     
     //desactiva tab mod
     public String desactivaTabMod(){        
       this.bandMod=true;           
       
       if(puntAnt.compareTo("2")==0){
           //this.doBuscarAsociacion();
           //this.activeTabIndex=Constantes.TAB_BUSQUEDA;
       }
       else{
           if(puntAnt.compareTo("1")==0){    
               this.doIniciarDetalleModificar();
               this.doListarDetallesFactura();
               this.activeTabIndex=Constantes.FACT_TAB_DET_FACTURA;
           }
       }
      Mensajes.guardarMensajeExito("Cancelar","Acción");
       
       return null;
    }
     
     //desactiva tab mod
     public String desactivaTabCerr(){        
       this.bandCerr=true;           
       
       if(puntAnt.compareTo("2")==0){
           //this.doBuscarAsociacion();
           //this.activeTabIndex=Constantes.TAB_BUSQUEDA;
       }
       else{
           if(puntAnt.compareTo("1")==0){    
               this.doIniciarDetalleCerrar();
               this.doListarDetallesFactura();
               this.activeTabIndex=Constantes.FACT_TAB_PED_ACTIVO;
           }
       }
      Mensajes.guardarMensajeExito("Cancelar","Acción");
       
       return null;
    }
     //desactiva tab elim
     public String desactivaTabElim(){        
       this.bandEli=true;           
       
       if(puntAnt.compareTo("2")==0){
           //this.doBuscarAsociacion();
           //this.activeTabIndex=Constantes.TAB_BUSQUEDA;
       }
       else{
           if(puntAnt.compareTo("1")==0){    
               this.doIniciarDetalleEliminar();
               this.doListarDetallesFactura();
               this.activeTabIndex=Constantes.FACT_TAB_PED_ACTIVO;
           }
       }
      Mensajes.guardarMensajeExito("Cancelar","Acción");
       
       return null;
    }
     
     public boolean  modificarDetalleFact(){
        boolean a=false;        
        DetalleFactura so=new DetalleFactura();
        try{            
            so=this.objDetalle_Mod;
            this.doIniciarDetalleModificar();
            a=DetalleFactura.modificarDetalleFactura(so);
        }catch(Exception e){
            System.out.println("Error en el metodo por: " + e.getMessage());
            e.printStackTrace();
        }
       return a;    
    }
     
     public boolean  cerrarFactura(){
        boolean a=false;        
        Factura so=new Factura();
        try{            
            so=this.objDetalle_Cerrar.getObjFactura();
            this.doIniciarDetalleCerrar();
            a=DetalleFactura.cerrarFactura(so);
        }catch(Exception e){
            System.out.println("Error en el metodo por: " + e.getMessage());
            e.printStackTrace();
        }
       return a;    
    }
     
      public boolean eliminarFactura(){
        boolean a=false;        
        Factura so=new Factura();
        try{            
            so=this.objDetalle_Eli.getObjFactura();
            this.doIniciarDetalleModificar();
            a=DetalleFactura.cancelarFactura(so);
        }catch(Exception e){
            System.out.println("Error en el metodo por: " + e.getMessage());
            e.printStackTrace();
        }
       return a;    
    }
}
